home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / game / patch / WHDIGamesC-D.lzh / Deflektor.lha / Deflektor / deflektorimager.asm < prev    next >
Assembly Source File  |  1997-07-12  |  6KB  |  346 lines

  1.     INCDIR    ASM-ONE:INCLUDE2.0/
  2.  
  3.     INCLUDE    OWN/Patcher.I
  4.     INCLUDE    DEVICES/TRACKDISK.I
  5.     INCLUDE    EXEC/EXEC_LIB.I
  6.     INCLUDE    EXEC/IO.I
  7.     INCLUDE    LIBRARIES/DOS_LIB.I
  8.     INCLUDE    LIBRARIES/FILEHANDLER.I
  9.  
  10.     INCDIR    ASM-ONE:OWN/PATCHER/PARAMQTX/
  11.  
  12.  
  13. HP    MOVEQ.L    #20,D0
  14.     RTS
  15.     DC.L    TAB
  16.     DC.B    'PTCH'
  17.     DC.B    '$VER:Deflektor_Diskimager_V1.00',0
  18.     EVEN
  19.  
  20. TAB    DC.L    PCH_INIT,INITROUT
  21.     DC.L    PCH_FILECOUNT,1
  22.     DC.L    PCH_ADAPTOR,ADNAME
  23.     DC.L    PCH_DISKNAME,DISKNAMEARRAY
  24.     DC.L    PCH_FILENAME,FILENAMEARRAY
  25.     DC.L    PCH_CHANGES,CHANGESARRAY    
  26.     DC.L    PCH_NAME,PARAMNAME
  27.     DC.L    PCH_DATALENGTH,LENGTHTABLE
  28.     DC.L    PCH_SPECIAL,SPECIALARRAY
  29.     DC.L    PCH_STATE,STATEARRAY
  30.     DC.L    PCH_STATE2,STATEARRAY2
  31.     DC.L    PCH_MINVERSION,VERSNAME        ;minimum version of THE PATCHER
  32.     DC.L    0
  33.  
  34. ;minimum version of the patcher required, uses driveinhibit
  35. VERSNAME    DC.B    'V1.02'        ;MAY NOT CONTAIN HEADING ZEROES
  36.     EVEN                ;MUST CONTAIN 2 NUMBERS AFTER POINT
  37.  
  38.  
  39. ADNAME    DC.B    'Done by Harry.',0
  40.     EVEN
  41.  
  42.  
  43. PARAMNAME
  44.     DC.B    'Deflektor, Diskimager for HD-install',0
  45.     EVEN
  46.  
  47.  
  48. DISKNAMEARRAY    DC.L    DISK1NAME
  49.  
  50. DISK1NAME    DC.B    'Deflektor',0
  51.     EVEN
  52.  
  53.  
  54. FILENAMEARRAY
  55.     DC.L    FILENAME
  56.  
  57. FILENAME    DC.B    'disk.1',0
  58.     EVEN
  59.  
  60. LENGTHTABLE    ;DC.L    $400
  61.     DC.L    3*$7D0*$42
  62.  
  63. CHANGESARRAY    DC.L    0        ;no changes to make in all cycles
  64. ;    DC.L    0            ;(why the hell is that table included?)
  65.  
  66. ;the parameter-initializing opens sourcedevice 
  67. INITROUT
  68. ;    MOVE.B    #'1',DISKNR
  69. ;    MOVE.B    #'1',DISKNR2
  70.     MOVEQ.L    #0,D0
  71.     MOVE.L    PTB_OPENDEVICE(A5),A0
  72.     JSR    (A0)
  73.     TST.L    D0
  74.     RTS
  75.  
  76. ;loading-statetexts for the cycles
  77. STATEARRAY    ;DC.L    LOADSTATE2
  78.  
  79. LOADSTATE2
  80.     DC.B    'Please insert your original writepro-',$A
  81.     DC.B    'tected disk '
  82. disknr    dc.b    'in the source drive.',0
  83.     EVEN
  84.  
  85. STATEARRAY2    DC.L    SAVESTATE
  86.  
  87. SAVESTATE    
  88.     DC.B    'Please insert your destination disk.',0
  89.     EVEN
  90.  
  91. ;routines to 'load' something
  92. SPECIALARRAY    DC.L    LOADROUT    ;load stuff from original
  93.  
  94. LOADROUT
  95.     MOVEQ.L    #0,D7
  96.     MOVEQ.L    #0,D0
  97.     MOVE.L    PTB_INHIBITDRIVE(A5),A0
  98.     JSR    (A0)
  99.  
  100. .NEU
  101.  
  102.  
  103. .4    MOVE.L    PTB_DEVICESOURCEPTR(A5),A1
  104.     MOVE.W    #TD_CHANGESTATE,IO_COMMAND(A1)
  105.     MOVE.L    (_SYSBASE).W,A6
  106.     JSR    _LVODOIO(A6)
  107.     TST.L    IO_ACTUAL(A1)
  108.     BNE.W    .NOTORG
  109.  
  110.     MOVE.L    PTB_ADDRESSOFFILE(A5),A4    ;load first part of disk
  111.     LEA.L    (A4),A2                ;offset to load in the dataspace
  112.  
  113.     MOVEQ.L    #2,D2                ;starttrack on the disk
  114.     MOVE.L    PTB_FILESIZE(A5),D3        ;bytes to read
  115.     MOVEQ.L    #0,D4                ;data from the start of the track
  116. ;    bra.s    .5                ;because reading starts with
  117.                         ;trackstart, this is obsolete
  118.  
  119. .3    TST.L    D4
  120.     BNE.W    .1
  121. .5    CMP.W    #$32,D0                ;SKIP TRACK 32
  122.     BNE.S    .NOSK
  123.     MOVEQ.L    #$33,D0
  124.     LEA.L    $1770(A2),A2
  125. .NOSK
  126.     MOVEQ.L    #$4,D5                ;4 tries, then error
  127.  
  128. .55
  129.     MOVE.L    PTB_DEVICESOURCEPTR(A5),A1
  130.     MOVE.L    PTB_SPACE(A5),IO_DATA(A1)    ;track is to load in PTB_SPACE
  131.     MOVE.L    #$7C00,IO_LENGTH(A1)        ;double length of track
  132.                         ;to decode the index-sync-read data
  133.                         ;my own trackcounter
  134.     MOVE.L    D2,D0
  135.     EOR.B    #1,D0
  136.     MOVE.L    D0,IO_OFFSET(A1)
  137.     MOVE.W    #TD_RAWREAD,IO_COMMAND(A1)
  138.     MOVE.B    #IOTDB_INDEXSYNC,IO_FLAGS(A1)
  139.     MOVE.L    (_SYSBASE).W,A6
  140.     JSR    _LVODOIO(A6)
  141.     TST.L    D0
  142.     BNE.W    .ERR
  143.     MOVE.L    PTB_SPACE(A5),A0
  144.     LEA.L    $7C00(A0),A1            ;end of buffer
  145.     LEA.L    $7C00(A0),A3
  146.     BSR.W    TRACKDECODE
  147.     TST.L    D0
  148.     BEQ.S    .R1OK
  149.     DBF    D5,.55
  150.     BRA.W    .NOTORG
  151.  
  152. .R1OK
  153.  
  154. ;    CMP.W    #2,D2                ;DISKCHECK
  155. ;    BNE.S    .R3OK
  156. ;    MOVE.L    A3,A0
  157. ;    CMP.L    #$4DF900DF,(A0)
  158. ;    BEQ.S    .R2OK
  159. ;    BRA.W    .NOTORG
  160.  
  161. .R2OK
  162.     ST    D7                ;correct disk - nothing anymore
  163.                         ;to change
  164. .R3OK    ADDQ.L    #1,D2
  165.  
  166. .1    MOVE.B    (A3)+,(A2)+
  167.     ADDQ.L    #1,D4
  168.     CMP.L    #$7D0*3,D4            ;tracklength
  169.     BNE.S    .2
  170.     MOVEQ.L    #0,D4                ;new track
  171. .2    SUBQ.L    #1,D3
  172.     BNE.W    .3
  173.  
  174.     MOVEQ.L    #0,D4
  175. .END
  176.  
  177.     MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;switch motor off
  178.     MOVE.L    #0,IO_LENGTH(A1)
  179.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  180.     MOVE.L    (_SYSBASE).W,A6
  181.     JSR    _LVODOIO(A6)
  182.     MOVEQ.L    #0,D0
  183.     MOVE.L    PTB_ENABLEDRIVE(A5),A0
  184.     JSR    (A0)
  185.  
  186.     MOVE.L    D4,D0
  187.     RTS
  188.  
  189. .ERR    MOVEQ.L    #-1,D4
  190.     BRA.S    .END
  191.  
  192. .NOTORG    TST.L    D7            ;if the first time the original
  193.     BNE.S    .ERR            ;was not in the source drive,
  194.     ST    D7            ;youll be asked to put it there
  195.     MOVE.L    PTB_DEVICESOURCEPTR(A5),A1    ;motor off
  196.     MOVE.L    #0,IO_LENGTH(A1)
  197.     MOVE.W    #TD_MOTOR,IO_COMMAND(A1)
  198.     MOVE.L    (_SYSBASE).W,A6
  199.     JSR    _LVODOIO(A6)
  200.     LEA.L    LINE1(PC),A0
  201.     LEA.L    LINE2(PC),A1
  202.     MOVE.L    PTB_REQUEST(A5),A6
  203.     JSR    (A6)
  204.     TST.L    D0
  205.     BNE.S    .ERR
  206.     BRA.W    .NEU
  207.  
  208. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
  209. LINE1    DC.B    'Please insert your original',0
  210.     EVEN
  211. LINE2    DC.B    'disk '
  212. DISKNR2    DC.B    'in the source drive.',0
  213.     EVEN
  214.  
  215.  
  216. DECODE1BYTE
  217.     MOVE.L    (A2),D0
  218.     ADDQ.L    #2,A2
  219.     LSR.L    D5,D0
  220.     AND.L    D3,D0    
  221.     MOVEQ.L    #$8-1,D2
  222. .1    LSL.W    #2,D0
  223.     ROXL.B    #1,D1    
  224.     DBF    D2,.1
  225.     MOVE.B    D1,D0
  226.     RTS
  227.  
  228.  
  229. ;< A0 RAWTRACK
  230. ;< A1 TRACKBUFFER
  231. ;> D0 ERROR
  232.  
  233. SYNC    DC.W    $4489
  234.  
  235. GETSYNC
  236. ;SYNCANFANG SUCHEN
  237.     MOVE.W    SYNC(PC),D1
  238. .SHF2    MOVEQ.L    #$10-1,D5
  239. .SHF1    MOVE.L    (A2),D0
  240.     LSR.L    D5,D0
  241.     CMP.W    D1,D0
  242.     BEQ.S    .SY
  243.     DBF    D5,.SHF1
  244.     ADDQ.L    #2,A2
  245.     CMP.L    A2,A4
  246.     BHI.S    .SHF2
  247.     BRA.S    .ERR
  248. .SY    
  249.  
  250. .1    MOVE.L    (A2),D0
  251.     ADDQ.L    #2,A2
  252.     LSR.L    D5,D0
  253.     CMP.W    D1,D0
  254.     BEQ.S    .1
  255.     SUBQ.L    #2,A2
  256.     CMP.L    A2,A4
  257.     BLS.S    .ERR
  258.     MOVEQ.L    #0,D0
  259.     RTS
  260.  
  261. .ERR    MOVEQ.L    #-1,D0
  262.     RTS
  263.  
  264.  
  265.  
  266. ;< A0 RAWTRACK
  267. ;< A1 TRACKBUFFER
  268. ;> D0 ERROR
  269. ;INTERN
  270. ;  D5 SHIFT
  271. ;  D7 SEKTORANZAHL
  272.  
  273. TRACKDECODE    MOVEM.L    A2/A3/A4/A5/D2/D3/D4/D5/D6/D7,-(A7)
  274.     MOVE.L    A0,A2
  275.     LEA.L    $7C00(A0),A4
  276. ;FUER JEDEN UNGELADENEN SEKTOR 1 BIT IN D7
  277.     MOVE.L    #%111,D7
  278. .NEXTSEC
  279. .ANF    MOVE.L    #$55555555,D3
  280.     BSR.W    GETSYNC
  281.     TST.L    D0
  282.     BNE.W    .ERR
  283.  
  284. ;$10 BYTES NACH ANFANG
  285. .DECHEAD
  286.     MOVEQ.L    #$5-1,D4
  287.     LEA.L    HEADER,A3
  288. .GETHEADER
  289.     BSR.W    DECODE1BYTE
  290.     MOVE.B    D0,(A3)+
  291.     DBF    D4,.GETHEADER
  292.     CMP.B    #$FF,HEADER
  293.     BNE.S    .ANF
  294.  
  295.     CMP.B    #2,HEADER+2
  296.     BHI.S    .ANF
  297.  
  298. ;SECTORDATEN DEKODIEREN
  299.  
  300. ;SEKTORNUMMER HOLEN
  301.     MOVEQ.L    #0,D0
  302.     MOVE.B    HEADER+2,D0
  303.     BCLR    D0,D7
  304.     MULU    #$7D0,D0
  305.     LEA.L    0(A1,D0.L),A3
  306.  
  307. .DECSEC
  308.     MOVE.L    #$7D0-1,D4
  309. .DECSEC1    BSR.W    DECODE1BYTE
  310.     MOVE.B    D0,(A3)+
  311.     DBF    D4,.DECSEC1
  312. ;SECCHECKSUM PRUEFEN
  313.     MOVE.B    HEADER+3,D4
  314.     LSL.W    #8,D4
  315.     MOVE.B    HEADER+4,D4
  316.  
  317. ;SECTOR ORDENTLICH DEKODIERT
  318.     BSR.S    CHKSUMSECTOR
  319.     CMP.W    D0,D4
  320.     BNE.S    .ERR
  321.  
  322.     TST.L    D7
  323.     BNE.W    .NEXTSEC
  324.     MOVEQ.L    #0,D0
  325. .END
  326.     MOVEM.L    (A7)+,A2/A3/A4/A5/D2/D3/D4/D5/D6/D7
  327.     RTS
  328. .ERR
  329.     MOVEQ.L    #-1,D0
  330.     BRA.S    .END
  331.  
  332. header    ds.b    $10
  333.     EVEN
  334.  
  335. CHKSUMSECTOR
  336.     MOVEQ.L    #0,D0
  337.     MOVE.B    HEADER+2,D0
  338.     MULU    #$7D0,D0
  339.     LEA.L    0(A1,D0.L),A3
  340.     MOVEQ.L    #0,D0
  341.     MOVE.W    #$7D0/2-1,D1
  342. .1    ADD.W    (A3)+,D0
  343.     DBF    D1,.1
  344.     RTS
  345.     
  346.